此篇文章是參考網路上的10多篇中英文文章整理而成,如有誤請不吝指教,謝謝。另如有侵權請告知刪除,謝謝。
起源:
一開始的網路傳輸由單點(Unicast)到廣播(Broadcast)。這樣的封包傳送方式對於多媒體傳輸的應用非常佔據頻寬,所以後來發展出群播(Multicast)的傳輸,減少了頻寬的浪費。請參考如下應用圖。
一、Internet群組管理協議(Internet Group Management Protocol)簡介:
IGMP(Internet Group Management Protocol,互聯網群組管理協議)是TCP/IP的協議族中負責的IP群播成員管理的協議, IP主機和與其直接相鄰的群播路由器之間建立,以便維護群播組成員關係。
參與的IP群播的主機可以在任意位置,任意時間,成員總數不受限制地加入或退出群播組。而群播路由器不需要也不可能保存所有主機的成員關係,它只是通過 IGMP的協議了解每個接口連接的網段上是否存在某個群播組的接收者,僅只是群組成員。而主機方只需要保存自己加入了哪些群播組。所以才會有查詢路由器的出現。
IGMP在主機與路由器之間是不對稱的:主機需要響應群播路由器的IGMP的查詢封包,即以IGMP成員報告封包響應;路由器週期性(每隔60秒)發送成員資格查詢封包(Query packet),然後根據收到的響應封包(report packet)確定某個特定群組在自己所在子網路上是否有主機加入,並且當收到主機的退出組(leave)的報告時,發出特定組的查詢封包(IGMP的版本2),以確定某個特定組是否已無成員存在。
到目前為止,有三個版本的IGMP:目前應用最多的是版本2。
IGMP V1(RFC1112定義)
IGMP V2(RFC2236定義)
IGMP V3(RFC 3376定義)
二、Internet Group Management Protocol目的:
Internet工作群組管理協議。IGMP主要用來解決網絡上廣播時佔用頻寬的問題。當網絡上的信息要傳輸給所有工作站時,就發出廣播(broadcast)信息(即IP地址主機標識位全為1),交換機會將廣播信息不經過濾地發給所有工作站;但當這些信息只需傳輸給某一部分工作站時,通常採用群播(multicast,也稱多點廣播)的方式,此時就要要求交換機支持IGMP。支持IGMP的交換機會識別群播信息並將其轉發至相應的群組,從而使不需要這些信息的工作站的網絡頻寬不被浪費。IGMP對於提高多媒體傳輸時的網絡性能尤為重要。
三、IGMP V1/2/3簡介:
IGMP Version 1原理:
IGMP Version 1 封包類型:
Membership Query: 成員關係查詢(0x11) ,224.0.0.1, 每60秒查詢一次
Membership Report:成員關係報告(0x12)
IGMP Version 1使用Query-Response模型來允許群播路由器和多層次交換器來確定在本網段內哪個群播群組是啟動的。在這個模型中,路由器或交換器充當IGMP 查詢路由器,每隔60秒週期性地發送IGMP Version 1 Membership Query給224.0.0.1。啟用群播的所有主機監聽該位址並接收Query Packet。主機以IGMP Version 1 Membership Report回覆,表示它要接收特定Group的Multicast Traffic;該網段中的路由器或交換器就可以了解群播群組中有哪些接收者。
也就是說共享網段表示一個網段上有多個群播路由器的情況。在這種情況下,由於此網段上
運行IGMP的的路由器都能從主機那裡收到成員資格報告消息,因此,只需要一個路由器發送成員資格查詢消息,這就需要一個路由器選舉機制來確定一個路由器作為查詢器。在IGMP的版本1中,查詢器的選擇由群播路由協議決定。
主機可以通過發送一個或多個主動的Membership Report封包表明加入(Join)一個群播群組。
如: 某個主機主動發送一個Report封包表明要接收群播群組(224.1.1.1)的流量。
主機通過停止處理群播群組訊務以及不回應IGMP Query的方式來離開群播群組。
IGMP Version1依靠L3的IP Multicast Routing Protocol(PIM、DVMRP等)來解決同一網段中哪個路由器或多層次交換器成為查詢路由器。查詢路由器發送IGMP Version 1的Query來確定哪個群播群組是啟動的。通常Designated Router會被選擇為查詢路由器。
主機群可以加入群播群組,但是IGMP Version 1沒有Leave訊息,路由器或多層次交換器需透過一個逾時機制的運作,讓那些沒有人接收的訊務不再送到不需要的主機成員。
IGMP Version 2增進的功能:主要增加了離開機制,特定群組查詢功能,最大響應時間欄位。
IGMP Version 2 封包類型:
Membership Query: 成員關係查詢(0x11)
V1 Membership Report:V1成員關係報告(0x12)
V2 Membership Report:V2成員關係報告(0x16)
Leave Group:離開群組報告(0x17)
離開群組訊息(Leave Group Message):
在IGMP 版本1 中,主機悄然離開群播組,不會給任何群播路由器發出任何通知。
造成群播路由器只能依靠群播組響應超時來確定群播成員的離開。而在版本2 中,
當一個主機決定離開時,如果它是對最近一條成員資格查詢消息作出響應的主機,
那麼它就會發送一條離開群組的消息,提升了離開的效率,加快對網路變化的響應。
特定群組查詢功能介紹(Group Query Message):
在IGMP V1 中,群播路由器的一次查詢,是針對該網段下的所有群播組。這種查詢稱為普遍群組查詢。在IGMP V2 中,在普遍群組查詢之外增加了特定群組的查詢,這種查詢封包的目的IP 地址為該群播組的IP地址,封包中的群組地址部分也為該群播組的IP 地址。這樣就避免了屬於其它群播組成員的主機發送響應封包。
最大響應時間欄位 (Maximum Reponse Time field) :
以動態地調整主機對群組查詢封包的響應時間(IGMP V1不可手動調整,默認為10秒),也就是說Query Message中可允許Query router 指定最大的查詢回應時間,控制查詢響應的突發性和微調組成員離開組時的離開延時的過程。例如網路存在大量的Multicast Group,可能需要很長的時間來傳送reply。但是此機制可以發一個未經許可的report告知成員參加該群組,這個機制在沒有其他成員存在的情況時減低了終端系統加入的延遲。
IGMP V2對查詢器的選擇由群播路由協議決定做了改進,規定同一網段上有多個群播路由器時,具有最小的IP地址的群播路由器被選舉出來充當查詢器。
IGMP V1/V2的缺點:
a.缺乏有效控制群播源的手段。
b.由於不知道群播源的位置,群播路徑的建立較困難。
c.發現一個唯一的群播位址十分困難,可能出現多個的群播組使用同一個群播位址的情況。
IGMP Version 3增進的功能:主要增加了過濾來源的機制,允許系統選擇想要接收的特定群播源或者排除不想接收的特定群播源。
使用IGMP V3之後,主機可指定要由特定的來源端接收群播的流量,可以是一部編碼器或是支援群播的視訊伺服器,也可以由指定特定來源以外的所有來源端接收群播流量。
Client可使用 IGMP Version 3 Report訊息,指定要由指定的Source接收群播的Stream,或是由指定Source以外的所有來源接收群播流量。防止啟用群播的路由將群播傳輸傳遞到沒有Client的子網路。群播路由器用來每隔一段時間輪詢一次網路中的群組成員。路由器可使用 IGMP Version 3 Query,查詢Client是否要由指定的來源清單,接收群播流量。
IGMP Version 3主要改進的功能是可以允許主機指定它們想要在某個Multicast Group中只接收特定的Multicast Source。這個增強功能使得路由資源可以更加有效地被使用。IGMP Version 3新增了可以根據群播來源來過濾群播的功能。
IGMP Version 3不僅可向下相容於之前版本的IGMP通訊協定。為了維持與較舊版本IGMP系統的向下相容性,IGMP Version 3群播路由器必須也同時採用Version 1和Version 2的通訊協定。
名詞解釋:
1.IGMP Router Timeout:
一個IGMPV2的主機可以在子網路中放置在一個尚未升級成IGMP V2的查詢路由器。
要求如下: IGMPv1的路由器將發送的一般查詢封包與最大響應時間設置為0。預設值為100(10秒)。
當IGMP V1 路由器預計響應V1 Report封包,但是卻會忽略V2 Report 封包,所以必須在每個端口保持狀態變量,而由IGMP V1路由器依據設定timeout發出響應查詢,才能決定每個端口跑的類型。最大可設置到400秒。
2.IGMP Snooping:比方說port 3送了一個Join multicast 224.0.0.1的封包到switch,switch就偷偷地學起來等到從port 5收到multicast 224.0.0.1的封包時就知道只要傳給port 3就好了不用傳給別的port,透過IGMP snooping就不需要手動設定了而且也不會送到其他不屬於這個multicast group的port,進而實現群播封包的L2快速轉發。
3.IGMP Host Timeout:
保存主機組成員關係的計時器時間,也就是說設定一個時間來計算多久沒有收到report封包,就將該port從某個multicast group移除。
最近開始玩 NAS 開始搞 GigaLan 之後就特別注意這些協定
低價 switch 常常都亂掛 IGMP 當行銷用,買家用入門貨感覺還蠻困擾的....,有 IGMP 應該是可以防止 MOD 和 NAS 串流充斥整個區域網路吧
我在購物網看到的低階 基本上都沒有提供IGMP的功能~組播的目的是節省不必要的flood佔據頻寬! 要看你環境有沒有需求! 如果你只有一台switch~這功能當然可有可無! 但廠商理論上是不會沒有這功能 而標有!
感謝分享,
另外有個IGMP last-member query的問題, 不知道有人可以回答嗎?
在IGMP v2上面, 當HOST發leave給querier,
querier會發group-specific query給HOST(有些switch叫last-member query?),
gs-query的用意是問HOST是不是真的要leave group,
因為有時後同一條線路上不只一個HOST,
可能HOST A要leave, 但HOST B卻還要在此group,
我的觀念正確嗎?